package com.knife.message.domain.service;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * 消息发送工具类
 *
 * @author tianhao.luo@hand-china.com
 * @version 1.0
 * @date 2022年06月12日 星期日 5:10 下午
 * @description
 * @since 1.0
 */
public interface KnifeMessageSendHelper {

    /**
     * 发送邮件给用户
     *
     * @param code         消息模板编码
     * @param subjectMap   标题参数
     * @param contentMap   内容参数
     * @param receiverList 接收人
     * @description
     * @version 1.0
     * @author tianhao.luo@hand-china.com
     * @date 2022/6/12 5:17 下午
     * @since 1.0
     */
    void sendEmail(String code, Map<String, String> subjectMap, Map<String, String> contentMap, List<Long> receiverList, Function<Long, String> emailFunction);

    /**
     * 发送邮件给用户
     *
     * @param code         消息模板编码
     * @param subjectMap   标题参数
     * @param contentMap   内容参数
     * @param receiverList 接收人
     * @param fileList     文件
     * @description
     * @version 1.0
     * @author tianhao.luo@hand-china.com
     * @date 2022/6/12 5:17 下午
     * @since 1.0
     */
    void sendEmailWithAttachment(String code, Map<String, String> subjectMap, Map<String, String> contentMap, List<Long> receiverList, Function<Long, String> emailFunction, List<File> fileList);


    /**
     * 发送邮件给指定邮箱地址，不会记录再knife-user-message中
     *
     * @param code       消息模板编码
     * @param subjectMap 标题参数
     * @param contentMap 内容参数
     * @param email      收件人邮箱
     */
    void sendEmail(String code, Map<String, String> subjectMap, Map<String, String> contentMap, String email);



    /**
     * 发送邮件给指定邮箱地址，不会记录再knife-user-message中
     *
     * @param code       消息模板编码
     * @param subjectMap 标题参数
     * @param contentMap 内容参数
     * @param email      收件人邮箱
     * @param fileList   附件
     */
    void sendEmailWithAttachment(String code, Map<String, String> subjectMap, Map<String, String> contentMap, String email, List<File> fileList);

}
